#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>



int main()
{
  pid_t id=fork();
  if(id<0)
  {
    printf("%d fork error\n",__FUNCTION__);
  }
  else if(id>0)
  {
    printf("child is run,pid is:%d\n",getpid());
    sleep(5);
    exit(100);
  }
  else
  {
    int status=0;
    pid_t ret=0;
    do
    {
      ret=waitpid(-1,&status,WNOHANG);
      if(ret==0)
      {
        printf("child is running\n");
      }
      sleep(1);
    }while(ret==0);
    if(WIFEXITED(status)&&ret==id)
    {
      printf("wait child 5s success,child return code is:%d\n",WEXITSTATUS(status));
    }
    else
    {
      printf("wait child failes,return\n");
      return 1;
    }
  }
  

  return 0;
}





//int main()
//{
//  pid_t pid=fork();
//  if(pid<0)
//  {
//    printf("%s fork error\n",__FUNCTION__);
//  }
//  else if(pid==0)
//  {
//    printf("child is run,pid is:%d\n",getpid());
//    sleep(5);
//    exit(300);
//  }
//  else
//  {
//    int status=0;
//    pid_t ret=waitpid(-1,&status,0);
//    printf("this is test for wait\n");
//    if(WIFEXITED(status)&&ret==pid)
//    {
//      printf("wait child 5s success,child return code is :%d\n",WEXITSTATUS(status));
//    }
//    else
//    {
//      printf("wait child failed,returnr\n");
//      return 1;
//    }
//  }
//
//  return 0;
//}
//






//
//int main()
//{
//
//  pid_t id=fork();
//  if(id==0)
//  {
//    sleep(20);
//    exit(10);
//  }
//  else if(id>0)
//  {
//    int status=0;
//    int ret=wait(&status);
//    if(ret>0 && (status & 0x7F)==0)
//    {
//      printf("child exit code:%d\n",(status)&0XFF);
//    }
//    else if (ret>0)
//    {
//      printf("sig code:%d\n",status&0x7F);
//    }
//  }
//  return 0;
//}
//



//
//int main()
//{
//
//  printf("hello");
//  exit(0);
//}
//


//
//int main()
//{
//  int i=0;
//  for(;i<200;i++)
//  {
//    printf("%d:%s\n",i,strerror(i));
//  }
//
//  return 0;
//}
//
//



//
//int main()
//{
//
//  pid_t id=fork();
//  if(id==0)
//  {
//    int cnt=0;
//    while(1)
//    {
//      printf("I am child....\n");
//      cnt++;
//      sleep(1);
//      if(cnt==5)
//        _exit(1);
//    }
//  }
//  else if(id>0)
//  {
//    while(1)
//    {
//      printf("I am parent\n");
//      sleep(1);
//    }
//  }
//  return 0;
//}
